﻿using Knlght.Domain;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq.Expressions;

namespace Knlght.CH.Domain.IRepository
{
    public interface IRepositoryBase<TModel> where TModel : class, new()
    {
        bool Add(TModel model);
        bool AddToList(List<TModel> models);
        bool Update(TModel model);
        bool UpdateToList(QueryRequest<TModel> request, Expression<Func<TModel, TModel>> key);       
        bool Delete(QueryRequest<TModel> request);
        bool IsExist(QueryRequest<TModel> request);
        TModel GetModel(object keyValue);
        TModel GetModel(Expression<Func<TModel, bool>> predicate);
        TModel GetModel(QueryRequest<TModel> request);
        List<TModel> GetList();
        List<TModel> GetList(Expression<Func<TModel, bool>> predicate);
        List<TModel> GetList(QueryRequest<TModel> request);
        List<TModel> GetListOnCache(QueryRequest<TModel> request);
        List<TModel> GetList(string strSql);    
        List<TModel> GetList(string strSql, DbParameter[] dbParameter);              
        List<TModel> GetList(int pageSize, int pageIndex, out int total, QueryRequest<TModel> request);
        T GetScalar<T>(QueryRequest<TModel> request, Expression<Func<TModel, T>> scalar);
        List<TModel> GetListScalar(QueryRequest<TModel> request, Expression<Func<TModel, TModel>> scalar);
    }
}
